//# include <iostream>
//# include <string>;
//# include <cstddef>
//
//using namespace std;


//int main()
//{
//	// void 类型的指针
//	// 无具体类型的指针
//	//接收任何类型的地址
//
//	//int a = 10;
//	///*int* p = &a;*/
//	//void* p = &a;
//	//cout << p << endl;
//	//cout << *(int*)p; //强转换类型
//
//	return 0;
//}

//int main() {

	//指针运算
	//指针+-整数
	//输出数组的方式
	//1)下标for循环的方式
	/*int arr[] = { 1,2,3,4,5 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < sz; i++)
	{
		cout << arr[i] << " ";
	}*/

	//2）指针的方式
	//int arr[] = { 1,2,3,4,5 };
	//int sz = sizeof(arr) / sizeof(arr[0]); //5/0=5个元素
	//int* p = &arr[sz-1];//5-1=4，也就是说找到最后一个元素的下标，下标从0开始
	//for (int i = 0; i < sz; i++)
	//{
	//	cout << *(p - i) << " "; // i=0, 4-0=4,最后一个元素下标。i=1，4-1=3
	//}
	
	//int arr[] = { 1,2,3,4,5 };
	//		//    0 1 2 3 4
	//int sz = sizeof(arr) / sizeof(arr[0]);
	//int* p = &arr[0];
	//for (int i = 0; i < sz; i++)
	//{
	//	cout << *p << " ";
	//	p++;  //通过p找到数组的地址，每次加1，下标加1
	//}

	//指针减去指针
	//前提是两个指针指向同一块空间
	
	//地址减去地址等于什么？
	// 指针减去指针得到的是两个指针之间的元素个数
	// 指针-指针的应用

//	return 0;
//}

//指针-指针的应用

//定义一个mystrlen的函数
// 里面的参数是char类型的指针变量p
//size_t mystrlen(char* p)
//{
//	//首先我们要计算\0之前的字符个数，那么我们是否需要一个循环呢？
//	//我们需不需要设置一个计数器，用于每次循环的字符如果不是\0就累加，直到看到\0
//	//我们不知道要循环多少次，那么while循环最合适，但是判断条件是什么?
//	//既然循环要找到\0之前的字符个数，那么判断条件为(！=\0)最合适
//	int count = 0;
//	while (*p != '\0')
//	{
//		//我现在进入了循环，我开始定义记数器，直到\0为止
//		count++;
//		p++; //从传参进来的数组下标为0的位置累加进入下一个下标的地址，判断是不是\0
//	}
//	return count; //无限循环直到我遇到\0，每次p++都判断，如果不是的话count++然后返回值
//}


//int main()
//{
//	char arr[] = "abcdef"; //我想用指针的方法知道这个数组的字符长度
//	//这个数组存放的实际上是 a b c d e f \0 但是strlen函数统计的是\0之前的字符个数
//
//	//我写一个mystrlen函数，传进去arr数组作为实参,用size_t数据类型变量strlen接收返回值
//	size_t strlen = mystrlen(arr); 
//
//	//最后接收调用后的mystrlen函数，strlen变量接收这个返回值字符串长度并打印
//
//	cout << strlen << endl;
//	
//	return 0;
//}

//size_t mystrlen(char* p)
//{
//	//我定义一个*q指针指向p，也就意味着我的*p和*q都指向了同一个下标的地址
//	char* q = p;
//	int count = 0;//这是我的计数器，每次累加直到遇到\0
//	while (*q != '\0')
//	{
//		q++;
//	}
//	return q - p; //循环结束找到\0,指针q-p得到的是两个指针之间的元素个数
//}
//
//int main()
//{
//
//	char arr[] = { 0 };
//	cin >> arr;
//	size_t len = mystrlen(arr);//数组名字就是首位元素的下标
//	cout << len << endl;
//
//	return 0;
//}

//int main()
//{
//	//指针的运算关系
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	//            0 1 2 3 4 5 6 7 8 9  sz=10个元素个数
//	//我还希望用指针打印
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = &arr[0];
//	
//	while(p < &arr[sz])//数组sz等于9，9就是我数组中最后的末尾元素的下标
//	{
//		
//		cout << *p << endl;
//		p++;
//	}
//
//	return 0

 